---
title: SAIF.Business.Policy operations and processes
summary: Business and technical operations supported by this library.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-08-21
library: SAIF.Business.Policy
reference_type: package
---

# SAIF.Business.Policy operations and processes

This page is the operation catalog and cross-operation hub for this library.

## Operation catalog

| Operation | Intent | Trigger | Inputs | Outputs | Rules | Tables | SQL |
| --- | --- | --- | --- | --- | --- | --- | --- |
| [OP-01 Retrieve hazard groups effective on a date](operations/op-01-retrieve-hazard-groups.md) | Load hazard groups in force on a given date | Caller invokes `GetHazardGroups` | `IDataPortalInfo`, effective date | `clsHazardGroupCollection` | [BR-POL-001](business-rules.md#br-pol-001-hazard-group-effective-dating), [BR-POL-002](business-rules.md#br-pol-002-hazard-group-data-is-read-only) | [HAZARD_GROUP](database-tables.md#hazard_group) | [SQL-002](sql/SQL-002-hazard-group-retrieve.md) |
| [OP-02 Hydrate a hazard group from a reader](operations/op-02-hydrate-hazard-group.md) | Map a data reader row to a `clsHazardGroup` instance | Row loop in OP-01 `AfterRetrieve` | `IDataPortalInfo`, open `IDataReader` | Initialized `clsHazardGroup` marked old | — | [HAZARD_GROUP](database-tables.md#hazard_group) | [SQL-002](sql/SQL-002-hazard-group-retrieve.md) |
| [OP-03 Look up / test membership in a hazard group collection](operations/op-03-hazard-group-lookup.md) | Find, test containment, or remove hazard groups by id/instance | Caller query on a retrieved collection | `HazardGroupID` or `clsHazardGroup` | Matching item, boolean, or removal | [BR-POL-003](business-rules.md#br-pol-003-hazard-group-identity) | — | — |
| [OP-04 Latest policy period effective date](operations/op-04-max-policy-effective-date.md) | Return the effective date of a policy's latest period | Caller invokes `MaxPolicyEffectiveDate` | `IDataPortalInfo`, policy number | `Date` | [BR-POL-009](business-rules.md#br-pol-009-policy-effective-date-derivation) | [POLICY_PERIOD](database-tables.md#policy_period) | [SQL-008](sql/SQL-008-policy-effective-date.md) |
| [OP-05 Policy period expiration date](operations/op-05-policy-period-expiration-date.md) | Resolve a policy period's expiration date across WCIS and non-WCIS stores | Caller invokes `PolicyPeriodExpirationDate` | `IDataPortalInfo`, policy number, period effective date | `Date` | [BR-POL-010](business-rules.md#br-pol-010-dual-source-period-date-resolution) | [POLICY_PERIOD](database-tables.md#policy_period), [POLICY_PERIOD_NON_WCIS](database-tables.md#policy_period_non_wcis) | [SQL-010](sql/SQL-010-policy-period-expiration-date.md) |
| [OP-06 Anniversary rating date](operations/op-06-anniversary-rate-date.md) | Resolve a policy period's anniversary rating date across WCIS and non-WCIS stores | Caller invokes `AnniversaryRateDate` | `IDataPortalInfo`, policy number, period effective date | `Date` | [BR-POL-010](business-rules.md#br-pol-010-dual-source-period-date-resolution) | [POLICY_PERIOD](database-tables.md#policy_period), [POLICY_PERIOD_NON_WCIS](database-tables.md#policy_period_non_wcis) | [SQL-009](sql/SQL-009-policy-period-anniversary-rate-date.md) |
| [OP-07 Determine policy market type](operations/op-07-market-type.md) | Convert a policy's market-type code to `Enums.MarketTypes` | Caller invokes `MarketType` | `IDataPortalInfo`, policy number | `Enums.MarketTypes` | [BR-POL-004](business-rules.md#br-pol-004-market-type-code-classification) | [POLICY](database-tables.md#policy) | [SQL-004](sql/SQL-004-get-market-type.md) |
| [OP-08 Latest premium history set id](operations/op-08-max-prem-hist-set-id.md) | Return the current premium-history set id | Caller invokes `MaxPremiumHistorySetId` | `IDataPortalInfo`, policy number, period effective date | `Decimal` | [BR-POL-007](business-rules.md#br-pol-007-current-premium-history-set-selection) | [PREM_HIST_SUMMARY](database-tables.md#prem_hist_summary) | [SQL-007](sql/SQL-007-max-prem-hist-set-id.md) |
| [OP-09 Policy minimum premium (stored procedure)](operations/op-09-policy-minimum-premium.md) | Retrieve the minimum premium via Oracle package | Caller invokes `PolicyMinimumPremium` | `IDataPortalInfo`, premium-history set id | `Decimal` | [BR-POL-008](business-rules.md#br-pol-008-minimum-premium-fail-soft-behavior) | — | [SQL-011](sql/SQL-011-policy-minimum-premium.md) |
| [OP-10 Has the information page been printed?](operations/op-10-information-page-printed.md) | Determine whether a policy period's information page was printed | Caller invokes `IsInformationPagePrinted` | `IDataPortalInfo`, policy number, period effective date | `Boolean` | [BR-POL-006](business-rules.md#br-pol-006-information-page-printed-status) | [ENDORSEMENT](database-tables.md#endorsement) | [SQL-006](sql/SQL-006-is-information-page-printed.md) |
| [OP-11 Determine the owning policy system](operations/op-11-policy-ownership-system.md) | Determine whether WCIS or SAIFQuote owns the policy | Caller invokes `GetPolicyOwnershipSystem` | `IDataPortalInfo`, policy number | `Enums.PolicyOwnershipSystems` | [BR-POL-005](business-rules.md#br-pol-005-policy-ownership-determination) | [DUAL](database-tables.md#dual) | [SQL-005](sql/SQL-005-get-policy-ownership-system.md) |
| [OP-12 Load and cache the benefit jurisdiction code map](operations/op-12-benefit-jurisdiction-code-map.md) | Build/refresh the cached benefit-jurisdiction code map | Caller invokes `CodeMaps.GetBenefitJurisdictionCodeMap` | `IDataPortalInfo`, optional refresh flag | Cached `clsBenefitJurisdictionCodeMap` | [BR-POL-012](business-rules.md#br-pol-012-benefit-jurisdiction-code-recognition), [BR-POL-016](business-rules.md#br-pol-016-code-map-caching) | [BENEFIT_JURISDICTION_CODE](database-tables.md#benefit_jurisdiction_code) | [SQL-001](sql/SQL-001-benefit-jurisdiction-code-lookup.md) |
| [OP-13 Load and cache the manual class type code map](operations/op-13-manual-class-type-code-map.md) | Build/refresh the cached manual-class-type code map | Caller invokes `CodeMaps.GetManualClassTypeCodeMap` | `IDataPortalInfo`, optional refresh flag | Cached `clsManualClassTypeCodeMap` | [BR-POL-013](business-rules.md#br-pol-013-manual-class-type-code-recognition), [BR-POL-016](business-rules.md#br-pol-016-code-map-caching) | [MANUAL_CLASS_TYPE_CODE](database-tables.md#manual_class_type_code) | [SQL-003](sql/SQL-003-manual-class-type-code-lookup.md) |
| [OP-14 Code ⇄ enum translation](operations/op-14-code-enum-translation.md) | Translate policy domain codes to/from enums | Any `Enums.Convert*` call | Code string or enum member | Enum member or code string | [BR-POL-017](business-rules.md#br-pol-017-code-enum-conversion-fallback) | — | — |
| [OP-15 Rating-period comparison helpers](operations/op-15-rating-period-comparison.md) | Provide shared market-type and equality tests for rating periods | Extension method call on `iPeriodRatingInfo` | `iPeriodRatingInfo` instance(s) | `Boolean` / `Integer` hash | [BR-POL-015](business-rules.md#br-pol-015-rating-period-market-type-classification), [BR-POL-018](business-rules.md#br-pol-018-rating-period-equality) | — | — |
| [OP-16 Hazard group equality and identity](operations/op-16-hazard-group-equality.md) | Compare hazard groups by identity | `Equals`/`GetHashCode`/`ToString` call | `clsHazardGroup` instance(s) | `Boolean` / hash / string | [BR-POL-003](business-rules.md#br-pol-003-hazard-group-identity) | — | — |

## Process flow diagram

The following diagram visualizes the primary hazard-group retrieval flow (OP-01/OP-02), the library's main BOF data-access path.

```mermaid
flowchart TD
	Start(["Caller invokes<br>GetHazardGroups"]) --> A["Construct Criteria with<br>effective date"]
	A --> B["RetrieveObject via BOF data<br>portal"]
	B --> C["BeforeRetrieve assigns<br>RetrieveSQL and binds<br>EffectiveDate"]
	C --> D["Framework executes request<br>against Oracle"]
	D --> E["AfterRetrieve reads rows via<br>reader"]
	E --> F{More rows?}
	F -->|Yes| G["New clsHazardGroup / Load /<br>Add to collection"]
	G --> F
	F -->|No| End(["Return populated<br>clsHazardGroupCollection"])
```

## Database interactions

The following table summarizes which operations read from or write to the database.

| Operation | SQL | Tables | Type |
| --- | --- | --- | --- |
| [OP-01 Retrieve hazard groups effective on a date](operations/op-01-retrieve-hazard-groups.md) | [SQL-002](sql/SQL-002-hazard-group-retrieve.md) | [HAZARD_GROUP](database-tables.md#hazard_group) | Read |
| [OP-04 Latest policy period effective date](operations/op-04-max-policy-effective-date.md) | [SQL-008](sql/SQL-008-policy-effective-date.md) | [POLICY_PERIOD](database-tables.md#policy_period) | Read |
| [OP-05 Policy period expiration date](operations/op-05-policy-period-expiration-date.md) | [SQL-010](sql/SQL-010-policy-period-expiration-date.md) | [POLICY_PERIOD](database-tables.md#policy_period), [POLICY_PERIOD_NON_WCIS](database-tables.md#policy_period_non_wcis) | Read |
| [OP-06 Anniversary rating date](operations/op-06-anniversary-rate-date.md) | [SQL-009](sql/SQL-009-policy-period-anniversary-rate-date.md) | [POLICY_PERIOD](database-tables.md#policy_period), [POLICY_PERIOD_NON_WCIS](database-tables.md#policy_period_non_wcis) | Read |
| [OP-07 Determine policy market type](operations/op-07-market-type.md) | [SQL-004](sql/SQL-004-get-market-type.md) | [POLICY](database-tables.md#policy) | Read |
| [OP-08 Latest premium history set id](operations/op-08-max-prem-hist-set-id.md) | [SQL-007](sql/SQL-007-max-prem-hist-set-id.md) | [PREM_HIST_SUMMARY](database-tables.md#prem_hist_summary) | Read |
| [OP-09 Policy minimum premium (stored procedure)](operations/op-09-policy-minimum-premium.md) | [SQL-011](sql/SQL-011-policy-minimum-premium.md) | N/A — stored procedure | Execute |
| [OP-10 Has the information page been printed?](operations/op-10-information-page-printed.md) | [SQL-006](sql/SQL-006-is-information-page-printed.md) | [ENDORSEMENT](database-tables.md#endorsement) | Read |
| [OP-11 Determine the owning policy system](operations/op-11-policy-ownership-system.md) | [SQL-005](sql/SQL-005-get-policy-ownership-system.md) | [DUAL](database-tables.md#dual) | Read (function call) |
| [OP-12 Load and cache the benefit jurisdiction code map](operations/op-12-benefit-jurisdiction-code-map.md) | [SQL-001](sql/SQL-001-benefit-jurisdiction-code-lookup.md) | [BENEFIT_JURISDICTION_CODE](database-tables.md#benefit_jurisdiction_code) | Read |
| [OP-13 Load and cache the manual class type code map](operations/op-13-manual-class-type-code-map.md) | [SQL-003](sql/SQL-003-manual-class-type-code-lookup.md) | [MANUAL_CLASS_TYPE_CODE](database-tables.md#manual_class_type_code) | Read |

## Failure and edge-case behavior
- OP-04 (`MaxPolicyEffectiveDate`): a `NULL`/absent result causes `CDate` to throw (unhandled).*
- OP-08 (`MaxPremiumHistorySetId`): a `NULL` result is normalized to `0` via an explicit `IsDBNull` guard rather than throwing.
- OP-09 (`PolicyMinimumPremium`): the call is wrapped in a `Try...Catch` with an **empty catch block**; any procedure failure is silently swallowed and the method returns `0` ([BR-POL-008](business-rules.md#br-pol-008-minimum-premium-fail-soft-behavior)). The bound `out_expense_constant_amount` output parameter is never read back.*
- OP-10 (`IsInformationPagePrinted`): no matching row returns `NULL`, and `CDec(Nothing/DBNull)` throws rather than returning `False` — an unguarded path.*
- OP-03 (`ItemByKey`): returns the last enumerated item (or `Nothing` on an empty list) when no match is found — a fall-through defect.*
- OP-09 and OP-11 call Oracle packages (`pk73069_rating_procs.get_minimum_expense_constant`, `pk73102_policy.does_wcis_own_submission`); both were retrieved successfully via the Legends CLI and both .NET call sites are confirmed live, reachable code (see PR-BP-005 in [Stored procedure operations](#stored-procedure-operations) below).

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Stored procedure operations

Operations implemented in Oracle stored procedures referenced by this library.

| Operation | Description | Source | Link |
| --- | --- | --- | --- |
| Resolve minimum premium and expense constant for a premium-history set | Resolves policy-period context from a premium-history set id, then branches on market type to compute the applicable minimum premium and (ARP only) expense constant. | `pk73069_rating_procs.get_minimum_expense_constant` | [Details](procedures/pk73069-rating-procs.md#operations) |
| Resolve policy-period rating context | Populates a `pp_info_rec` with policy number, period effective/expiration dates, rating rule master id, period end date, market type, premium-history type, plan code, financial system code, anniversary rate date, combo period premium set seq num, and create user name. | `pk73069_rating_procs.get_pp_info` (private helper) | [Details](procedures/pk73069-rating-procs.md#operations) |
| Compute ARP minimum premium and expense constant | Reads premium-history type / policy number / period effective date for the set, then delegates to `get_variable_min_exp_constant` with market context `'ARP'`. Only path that returns an expense constant. | `pk73069_rating_procs.sp72759_get_arp_min_ec` (private helper) | [Details](procedures/pk73069-rating-procs.md#operations) |
| Determine submission ownership system | Returns the Y/N `wcis_owns_flag` for the policy's current submission status, defaulting to `'Y'` on any failure. | `pk73102_policy.does_wcis_own_submission` | [Details](procedures/pk73102-policy.md#operations) |

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Business rules](business-rules.md)
- [Database tables](database-tables.md)
- [SQL catalog](sql/index.md)
- [Procedures](procedures/index.md)
- [API reference](api/index.md)

## Sources
- `SAIF.Business.Policy/clsHazardGroupCollection.vb`
- `SAIF.Business.Policy/clsHazardGroup.vb`
- `SAIF.Business.Policy/PolicyInformation.vb`
- `SAIF.Business.Policy/CodeMaps/clsBenefitJurisdictionCodeMap.vb`
- `SAIF.Business.Policy/CodeMaps/clsManualClassTypeCodeMap.vb`
- `SAIF.Business.Policy/Enums.vb`
- `SAIF.Business.Policy/PeriodRatingInfoExtensions.vb`
